import 'package:flutter/material.dart';

main() {
  runApp(MaterialApp(home: Scaffold(body: ZhText('Hello Zhejiang', fs: 20, textClickCount: 400,))));
}


//自定义“有状态的组件” —— 组件 和  状态 相关联，而不是写在一起
class ZhText extends StatefulWidget {           //——组件本身
  //此处可以声明不需要在UI中重绘的普通变量
  String txt ;
  double fs;
  Color fc;
  int textClickCount;

  ZhText(this.txt, {super.key, this.fs=30, this.fc=Colors.yellow, this.textClickCount=300});

  @override
  State<ZhText> createState() => _ZhTextState(this.textClickCount); //用于创建当前组件的“状态变量”
}


class _ZhTextState extends State<ZhText> {                //——组件关联的状态对象, 每个State对象内都有一个属性widget，就指向关联的组件对象
  //此处声明需要在UI中重绘的状态变量
  int count = 200;      //点击次数

  _ZhTextState(this.count);

  // @override
  // void initState() {
  //   super.initState();
  //   //此处可以发起网络请求，获取服务器端数据，赋值给当前组件的状态变量
  // }
  
  @override
  Widget build(BuildContext context) {
    return TextButton(
      onPressed: () {
        // count++;      //这样修改状态变量，不会引起UI重新渲染
        setState(() {    //只有写在setState()方法内的状态变量修改，才能引起重新渲染 —— 此方法的作用类似于鸿蒙中的@State装饰器
          count++;
          // widget.fs = 80;        //State对象中可以把Widget中的属性作为状态变量使用，但不推荐
          // print('FONTSIZE: ${widget.fs}');
          // print('COUNT: $count');
        });
      },
      child: Text(
        '${widget.txt} - $count',
        style: TextStyle(fontSize: widget.fs, color: widget.fc),
      ),
    );
  }
}
//代码片段缩写： stless /  stful